//
//  WBStatusCell.swift
//  TYCWeiBo
//
//  Created by 中发 on 2018/6/11.
//  Copyright © 2018年 中发. All rights reserved.
//
/**
 缓存行高和性能优化：（总在测量，不要估计）
    行高一定要缓存，因为苹果本身的性能优化已经做得很好了。如果写一个程序不需要缓存行高，刷新侦率就很高，可以不缓存！缓存行高是解决性能的最佳途径
    控件上不要设置圆角半径，所有图像离屏渲染的属性。
    不要动态创建控件，所需要的控件都需要提前创建好，在显示的时候，根据数据隐藏/显示
    cell中控件层次越少越好，数量越少越好
 高级优化：
    离屏渲染,（self.layer.drawsAsynchronously = true）异步绘制。。。。如果检测到性能已经很好，就不需要离屏渲染。因为离屏渲染需要在GPU/CPU之间快速切换，耗电会腻害
    栅格化，（self.layer.shouldRasterize = true）异步绘制后会生成一张独立的图像，cell在屏幕上滚动的时候，本质上滚动的是一张图片，停止滚动后，可以接受监听
    使用栅格化，必须注意指定‘分辨率’（self.layer.rasterizationScale = UIScreen.main.scale）
 */
import UIKit
/**
 微博cell的协议
 如果需要设置可选协议的方法：
 1.需要遵守 NSObjectProtocol协议
 2.协议需要是 @objc 的
 3.方法需要 @objc optional
 */
@objc protocol WBStatusCellDelegate: NSObjectProtocol {
    
    /// 微博cell选中 URL字符串
    ///
    /// - Parameters:
    ///   - cell: WBStatusCell
    ///   - urlString: URL
    @objc optional func statusCellDidSelectedURLString(cell: WBStatusCell, urlString: String)
}

/// 微博cell
class WBStatusCell: UITableViewCell {
    
    /// 代理属性
    weak var delegate: WBStatusCellDelegate?
    var viewModel: WBStatusViewModel? {
        didSet{
            /// 微博文本
            statusLabel?.attributedText = viewModel?.statusAttrText
            /// 设置被转发微博的文字
            retweetedTextLabel?.attributedText = viewModel?.retweetedAttrText
            /// 姓名
            nameLabel.text = viewModel?.status.user?.screen_name
            /// 设置会员名，直接获取属性，不需要任何计算
            memberView.image = viewModel?.memberIcon
            /// 认证图标
            vipImageView.image = viewModel?.vipIcon
            iconView.tempSetImage(urlString: viewModel?.status.user?.profile_image_url, placeholderImage: UIImage(named: "avatar_default_big"), isAvart: true)
            /// 底部工具栏
            toolBar.viewModel = viewModel
            //配图视图的视图模型
            pictureView.viewModel = viewModel
            //测试配图视图的高度
//            pictureView.heightCons.constant = viewModel?.pictureViewSize.height ?? 0
            /// 设置配图视图 的URL数据
            //测试四张图像
//            if viewModel?.status.pic_urls?.count > 4 {
//                //修改数组，将末尾的数据全部删除
//                var picURLs = viewModel!.status.pic_urls!
//                picURLs.removeSubrange(((picURLs.startIndex) + 4) ..< (picURLs.endIndex))
//                pictureView.urls = picURLs
//            }else {
//                pictureView.urls = viewModel?.status.pic_urls
//            }
            //设置配图（原创和被转发）
             pictureView.urls = viewModel?.picURLs
            
            ///设置来源
            souceLabel.text = viewModel?.status.source
            /// 设置创建时间
            timeLabel.text = viewModel?.status.createdDate?.tyc_dateDescription
        }
    }
    
    
    //头像
    @IBOutlet weak var iconView: UIImageView!
    //姓名
    @IBOutlet weak var nameLabel: UILabel!
    //会员
    @IBOutlet weak var memberView: UIImageView!
    //时间
    @IBOutlet weak var timeLabel: UILabel!
    //来源
    @IBOutlet weak var souceLabel: UILabel!
    //认证图标
    @IBOutlet weak var vipImageView: UIImageView!
    //微博正文
    @IBOutlet weak var statusLabel: UILabel!
    /// 底部工具栏
    @IBOutlet weak var toolBar: WBStatusToolBar!
    /// 配图视图
    @IBOutlet weak var pictureView: WBStatusPictureView!
    
    /// 被转发微博的标签，原创微博没有此控件，一定要用‘？’
    @IBOutlet weak var retweetedTextLabel: UILabel?
    
    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
        //离屏渲染,异步绘制。。。。如果检测到性能已经很好，就不需要离屏渲染。因为离屏渲染需要在GPU/CPU之间快速切换，耗电会腻害
        self.layer.drawsAsynchronously = true
        //栅格化，异步绘制后会生成一张独立的图像，cell在屏幕上滚动的时候，本质上滚动的是一张图片，停止滚动后，可以接受监听
        self.layer.shouldRasterize = true
        //使用栅格化，必须注意指定‘分辨率’
        self.layer.rasterizationScale = UIScreen.main.scale
    }

}

